Regular expression matching is generally used to detect specific values in a set of data, e.g., to detect particular characters, words, or patterns of characters in a string of text. Regular expression matching is often used, for example, in edge of network workloads to detect specific values in data packets communicated over a network. Whereas software routines may be used to perform regular expression matching, for high volume and/or high speed applications such as network workloads, it is often desirable to perform regular expression matching in hardware to reduce the overhead of such operations.
In addition, as semiconductor technology continues to inch closer to practical limitations in terms of increases in clock speed, architects are increasingly focusing on parallelism in processor architectures to obtain performance improvements. At the chip level, multiple processor cores are often disposed on the same chip, functioning in much the same manner as separate processor chips, or to some extent, as completely separate computers. In addition, even within cores, parallelism is employed through the use of multiple execution units that are specialized to handle certain types of operations. Pipelining is also employed in many instances so that certain operations that may take multiple clock cycles to perform are broken up into stages, enabling other operations to be started prior to completion of earlier operations. Multithreading is also employed to enable multiple instruction streams to be processed in parallel, enabling more overall work to performed in any given clock cycle.
As such, it is now possible to incorporate dedicated regular expression matching logic, often referred to as an expression engine, on a chip to accelerate regular expression matching operations. Typically, however, an expression engine is implemented as a coprocessor and is coupled to one or more general purpose processing cores via an on-chip network. The general purpose processing cores typically pass data to the expression engine to perform regular expression matching before loading and using the data. However, in such an arrangement, the expression engine becomes a shared resource, particularly for real-time software algorithms. Accordingly, the expression engine may become a bottleneck should multiple general purpose processing cores need to use the expression engine at the same time.
Therefore, a significant need continues to exist in the art for a manner of minimizing the performance overhead associated with regular expression matching in a data processing system.